-- 后端节点的主文件， 会被命名成 .router
-- 这个是运行在node节点上的一个router，处理所有来访问这个节点的请求
-- 后台节点，只有不同节点， 本节点之间的调用
-- 不同节点调用，全部走 .router 来调用， 本节点调用，全部使用一级命令的模式，而且不用process了
local filename = "router.lua"

local skynet = require "skynet"
local cluster = require "skynet.cluster"
require "skynet.manager"

local filelog = require "filelog"
local routerbase = require "routerbase"

local Router = routerbase:new()

--[Comment]
--增加机器人金钱库存
--
function Router.CMD.add_inventory(moneytype, value, reason)
    skynet.send(".inventorymgr", "lua", "add_inventory", moneytype, value, reason)
end

--[Comment]
--减少机器人金钱库存
--
function Router.CMD.sub_inventory(moneytype, value, reason)
    skynet.send(".inventorymgr", "lua", "sub_inventory", moneytype, value, reason)
end

--[Comment]
--请求机器人进桌
--gamename 游戏名 形如mjxznode
--table_index 桌子索引
--robotnum 机器人数量
--robotconf 机器人配置 形如{diamond = 1000, logicname = "mjxz"}
--logicname 机器人的逻辑处理文件，命名格式为：游戏名 + logic,此处只用传游戏名即可,mjxz对应逻辑文件为mjxzlogic.lua
--
function Router.CMD.request_robot_enter(gamename, table_index, robotnum, robotconf)
    return skynet.call(".schedulemgr", "lua", "request_robot_enter", gamename, table_index, robotnum, robotconf)
end

--[Comment]
--请求机器人离桌
--gamename 游戏名 形如mjxznode
--table_index 桌子索引
--robot_rids 机器人rid列表
--
function Router.CMD.request_robot_leave(gamename, table_index, robot_rids)
    return skynet.call(".schedulemgr", "lua", "request_robot_leave", gamename, table_index, robot_rids)
end

--[Comment]
-- 请求机器人进匹配场
-- gamename 游戏名,形如dnnode mjxznode
-- match_type 匹配场类型 diamond 或 coin
-- match_level 匹配场级别 1初级 2中级 3高级
--robotnum 机器人数量
--robotconf 机器人配置 形如{diamond = 1000, logicname = "mjxz"}
--logicname 机器人的逻辑处理文件，命名格式为：游戏名 + logic,此处只用传游戏名即可,mjxz对应逻辑文件为mjxzlogic.lua
--
function Router.CMD.request_robot_match(gamename, match_type, match_level, robotnum, robotconf)
    return skynet.call(".schedulemgr", "lua", "request_robot_match", gamename, match_type, match_level, robotnum, robotconf)
end

--[Comment]
--批量生成机器人
--
function Router.CMD.batch_build_robots(num, conf)
    skynet.send(".mainnode", "lua", "batch_build_robots", num, conf)
end

--[Comment]
--批量销毁机器人
-- rids 或 timestamp 只用传一个
-- rids 要销毁机器人rid列表
-- timestamp 销毁创建时间戳小于timestamp的机器人
--
function Router.CMD.batch_destory_robots(rids, timestamp)
    skynet.send(".mainnode", "lua", "batch_destory_robots", rids, timestamp)
end

--[Comment]
--获得机器人信息（游戏中，匹配中人数）
--
function Router.CMD.get_robot_info()
    return skynet.call(".schedulemgr", "lua", "get_robot_info")
end

--[Comment]
--获得机器人库存值
--
function Router.CMD.get_robot_inventory()
    return skynet.call(".inventorymgr", "lua", "get_robot_inventory")
end

--[Comment]
--改变机器人状态 true运行机器人 false关闭机器人
--gamename 游戏名 形如sdb dn
--
function Router.CMD.change_robot_state(newstate, gamename)
    return skynet.call(".schedulemgr", "lua", "change_robot_state", newstate, gamename)
end

--[Comment]
-- 获得机器人状态 true运行 false关闭
--
function Router.CMD.get_robot_state()
    return skynet.call(".schedulemgr", "lua", "get_robot_state")
end

--[Comment]
-- 获得机器人玩家数据
-- num 需要获得的玩家数据个数,默认1个
-- 返回机器人玩家数据数组，形如{robotinfo1, robotinfo2}
--
function Router.CMD.gen_robotinfo(num)
    return skynet.call(".robotmgr", "lua", "gen_robotinfo", num)
end

--[Comment]
-- 保存机器人玩家数据
--robot_infos 玩家数据数组，形如{robotinfo1, robotinfo2}
--
function Router.CMD.save_robotinfo(robot_infos)
    return skynet.call(".robotmgr", "lua", "save_robotinfo", robot_infos)
end

--[Comment]
-- 拒绝保存游戏服机器人
--state true不保存机器人，false保存机器人
--
function Router.CMD.refuse_save_robotinfo(state)
    return skynet.call(".robotmgr", "lua", "refuse_save_robotinfo", state)
end

skynet.start(function()
	Router:start()
end)

